#ifndef _MICRO_MEMORY_H_
#define _MICRO_MEMORY_H_

#include "stdint.h"


/* 字节对齐（至少要4字节对齐） */
#define MICRORTOS_MEM_ROUNDUP_VALUE   8
/* 使x对n字节对齐 */
#define memRoundUp(x, n) (((x) + (n) - 1) & (~((n) - 1)))

/* 此区域内存未使用 */
#define MICRORTOS_MEM_UNUSED  0
/* 此区域内存已使用 */
#define MICRORTOS_MEM_USED    1


/* 模拟动态内存大小 */
#define MICRORTOS_MEM_LENGTH          (1024 * 16)


typedef struct{
    uint32_t startAddr: 30;
    uint32_t stopAddr: 30;
    uint32_t state: 2;
}MicroMemType;


/* 动态内存头部信息 */
extern MicroMemType g_typeMicroRTOSMemHead;


void vMicroMemInit(void);
void vMicroMemCreate(MicroMemType *ptypeMemHanle, uint8_t *pucMemHeap, int32_t iLength);
void *pvMicroMemMalloc(MicroMemType *ptypeMemHanle, int32_t iSize);
void *pvMicroMemCalloc(MicroMemType *ptypeMemHanle, int32_t iNumber, int32_t iSize);
void *pvMicroMemRealloc(MicroMemType *ptypeMemHanle, void *pvMemAddr, int32_t iSize);
void vMicroMemFree(MicroMemType *ptypeMemHanle, void *pvMemAddr);

#endif // DEVICESMEM_H_INCLUDED
